4.1 字符的unicode表示法
| unicode表示法 | 码点 | 兼容性 |
|---|---|---|
\uxxxx |
一个两个字节长度的16进制数字 | all |
\uxxxx\uxxxx |
两个两个字节长度的16进制数字 | all |
\u{xx...} |
码点为任意unicode编码 | es6+ |
1 | "\u{20BB7}" |
4.2 codePointAt()
背景:javascript使用utf-16(两个字节)存储字符,使用charCodeAt无法正确处理四字节字符
类似charCodeAt,区别是codePointAt能够正确识别四字节字符(比如吉祥)。
1 | var s = '吉a'; |
注意:codePointAt仍会按照两个字节一个字符的方式计算字符串中字符数量,因此传递给codePointAt的参数和charCodeAt是一样的。
扩展:使用for-of可以正确识别32位(4字节)UTF-16字符。
1 | var s = '吉a'; |
技巧:使用codePointAt获取字符的UTF-16完整编码,并判断其大小,就可以识别4字节字符。
1 | function is32Bit(c) { |
4.3 String.fromCodePoint()
背景:String.fromCharCode用于从码点返回对应的字符,但对32位的UTF-16字符进行转换会发生溢出。
String.fromCodePoint对应codePointAt,可以正确返回32为UTF-16字符对应的字符;当传递多个参数给String.fromCodePoint时,会返回每个参数(码点)对应的字符拼接成的字符串。
1 | String.fromCodePoint(0x20BB7) |
4.4 字符串的遍历器接口
说明:es6为字符串添加了便利器接口,因而可以通过for-of遍历字符串。
特点:能够正确识别码点大于\uffff的字符
技巧:利用for-of计算字符串正确的字符个数(传统的for和for-in无法做到)
1 | var text = String.fromCodePoint(0x20BB7); |
4.5 at()
说明:字符串的方法(提案状态?),能够识别码点大于\uffff的字符
ES5:字符串的charAt方法用于返回字符串给定位置的字符,但不能正确识别码点大于\uffff的字符
1 | '吉'.at(0) // "吉" |
4.6 normalize()
说明:es6提供字符串实例的normalize方法,用来将字符的不同表示方法统一为同样的形式,称为unicode正规化。
4.7 includes(), startsWith(), endsWith()
| 方法 | 返回值 | 第一个参数 | 第二个参数(可选) |
|---|---|---|---|
| includes | 布尔值,表示是否找到了参数字符串 | 要搜索的字串 | 开始搜索的位置 |
| startsWith | 布尔值,表示参数字符串是否在源字符串的头部 | 要搜索的字串 | 开始搜索的位置 |
| endsWith | 布尔值,表示参数字符串是否在源字符串的尾部 | 要搜索的字串 | 停止搜索的位置 |
1 | var s = 'Hello world!'; |
4.8 repeat()
用途:返回一个将源字符串重复n次的新字符串
注意:如果参数不是整数,将会按照一定规则取整
| 非整数参数 | 转换后 |
|---|---|
| 小数 | 向下取整 |
负数或Infinity |
报错 |
| 0~-1 | 0 |
NaN |
0 |
| 字符串 | 相应的数字 |
1 | 'x'.repeat(3) // "xxx" |
4.9 padStart(), padEnd()
ES7:补全字符串的长度
| 函数 | 用途 |
|---|---|
| padStart | 用于头部补全 |
| padEnd | 用于尾部补全 |
| 参数 | 说明 |
|---|---|
| 第一个参数 | 指定字符串的最小长度 |
| 第二个参数(可选) | 用来补全的字符串,默认为空格。如果用来补全的字符串与原字符串,两者的长度之和超过了指定的最小长度,则会截去超出位数的补全字符串 |
注意:如果原字符串的长度,等于或大于指定的最小长度,则返回原字符串。
1 | // 为数值补全指定位数 |
4.10 模版字符串
语法:使用反引号括起来
- 可以当作普通字符串来使用,也可以用来定义多行字符串
- 可以在字符串中
嵌入变量 - 如果模版字符串中使用反引号,则前面要用
反斜杠转义 - 所有的
空格和缩进都会被保留在输出之中,不需要的话可以使用trim方法消除 - 模板字符串中嵌入变量,需要将变量名写在
${}之中
4.10.1 嵌入JS表达式
大括号内部可以放入任意的JavaScript表达式,可以
- 进行运算
- 引用对象属性
- 调用函数
注意:
- 如果
${}中的值不是字符串,将按照一般的规则转为字符串 - 如果
${}内部是一个字符串,将会原样输出 - 如果模板字符串中的变量没有声明,将报错
- 通过
${},模板字符串甚至还能嵌套
1 | // 定义返回模版字符串的函数 |
4.11 实例:模版编译
l04_template.vue
1 | <script> |
1 | # http://localhost:8080/#!/l04 |

4.12 标签模版
说明:一种针对模版字符串的特殊函数调用。
语法:
1 | 函数名`模${表达式1}版字${表达式2}串`; |
参数:调用函数传入的第一个参数有一个row属性,是一个和第一个参数本身内容相同的数组,不过元素中的所有\都被转义了,从而可以获得字符串的原始版本。
用途:通过实现相应的处理模版字符串的函数,标签模版常用于
- 处理
HTML字符串过滤 - 多语言转换(国际化处理)
- 为模版增加条件判断和循环处理等模版基础能力
- 嵌入其它语言
l04_taggedTemplate.vue
1 | <script> |
4.13 String.raw()
用途:两种使用方式
- 作为模版标签使用
- 作为普通函数调用
1 | <script> |